package com.wgy.day34.模拟BS服务器;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/*
创建B/S版本TCP服务器:
*/
public class Demo06TCPServer {
    public static void main(String[] args) throws IOException {
        // 1.创建一个服务器ServerSocket对象和系统要指定的端口号
        ServerSocket ss = new ServerSocket(8080);
        // 2.使用ServerSocket对象中的方法 accept(),获取到请求的客户端对象Socket
        Socket socket = ss.accept();
        //3.使用Socket对象中的getInputStream()获取网络字节输入流InputStream对象
        InputStream is = socket.getInputStream();
        // 4.使用网络字节输入流InputStream对象中的read方法,读取客户端发送的数据
       /* byte[] bytes=new byte[1024];
        int len=is.read(bytes);
       while ((len=is.read(bytes))!=-1){
           System.out.println(new String(bytes,0,len));
       }*/
        //把is网络字节输入流对象,转换为字符缓冲输入流
        BufferedReader bf = new BufferedReader(new InputStreamReader(is));
        //把客户端请求信息的第一行读取出来
        String line = bf.readLine();
        //把读取的信息进行切割,只要中间的部分
        String[] arr = line.split(" ");
        //把路径前面的/去掉,进行截取
        String htmlpath = arr[1].substring(1);
        //创建一个本地字节输入流,构造方法中绑定要读取的html路径
        FileInputStream fis = new FileInputStream(htmlpath);
        //使用Socket中的方法getOutputStream 获取网络字节输出流OutputStream对象
        OutputStream os = socket.getOutputStream();
        //写入HTTP协议响应头,固定写法
        os.write("HTTP/1.1 200 OK\r\n".getBytes());
        os.write("content-Type:text/html\r\n".getBytes());
        os.write("\r\n".getBytes());
        //
        int len = 0;
        byte[] bytes = new byte[1024];
        while ((len = fis.read(bytes)) != -1) {
            os.write(bytes, 0, len);

        }
        fis.close();
        socket.close();
        ss.close();

    }
}
